#include<stdio.h>
const int maxn=100;
int dp[maxn][maxn]={0};
char map[maxn][maxn];
int m,n;
int s[2][4]={
  0,0,1,-1,
  1,-1,0,0,
};
void dfs(int x,int y,int x2,int y2,int sum)
{
	if(x==x2&&y==y2){
		printf("%d\n",sum);
		return;
	}
	for(int i=0;i<4;i++){
		int nx=x+s[0][i];
		int ny=y+s[1][i];
		if(nx<0||ny<0||nx>=n||ny>=m)
			continue;
		if(dp[nx][ny]==1||map[nx][ny]=='*')
			continue;
		dp[x][y]=1;
		dfs(nx,ny,x2,y2,sum+1);
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++){
		getchar();
		for(int j=0;j<m;j++){
			map[i][j]=getchar();
		}
		map[i][m+1]='\0';
	}
	int x1,y1,x2,y2;
	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
	dfs(x1,y1,x2,y2,0);
	return 0;
}
